<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>高阶函数_函数柯里化</title>
</head>
<body>
    <!-- 准备好一个“容器” -->
	<div id="test"></div>
	
	<!-- 引入react核心库 -->
	<script type="text/javascript" src="../js/react.development.js"></script>
	<!-- 引入react-dom，用于支持react操作DOM -->
	<script type="text/javascript" src="../js/react-dom.development.js"></script>
	<!-- 引入babel，用于将jsx转为js -->
	<script type="text/javascript" src="../js/babel.min.js"></script>
    <script type="text/babel">
        /* 
            高阶函数： 如果一个函数符合下面2个范围中的任何一个，那该函数就是高阶函数。
                    1.若A函数，接收的参数是一个函数，那么A就可以称之为高阶函数。
                    2.若A函数，调用的返回值依然是一个函数，那么A就可以称之为高阶函数。
                    常见的高阶函数有： Promise、setTimeout、arr.map()、arr.each()等等;
            函数的柯理化：通过函数调用继续返回函数的方式，实现多次接收参数最后统一处理的函数编码形式
                function sum(a){
                    return (b) => {
                        return (c) => {
                            return a+b+c
                        }
                    }
                }
        */

        class Login extends React.Component{
            // 初始化状态
            state = {
                username: "",
                password: "",
            }

            // 保存表单数据到状态中
            saveFormData = (dataType) =>{
                return (e)=>{
                    this.setState({[dataType]: e.target.value})
                }
            }

            handleSubmit = (e)=>{
                e.preventDefault() // 阻止表单提交
                const {username, password} = this.state
                alert(`你输入的用户名是：${username},你输入的密码是：${password}`);
            }

            render(){
				return(
					<form onSubmit={this.handleSubmit}>
						用户名：<input onChange={this.saveFormData('username')} type="text" name="username"/>
						密码：<input onChange={this.saveFormData('password')} type="password" name="password"/>
						<button>登录</button>
					</form>
				)
			}
        }
        ReactDOM.render(<Login/>, document.getElementById('test'))
    </script>
</body>
</html>